home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / borland / prbgi097.zip / C.ZIP / USERPRTF.C < prev   
C/C++ Source or Header  |  1992-12-15  |  4KB  |  134 lines

  1. #include <graphics.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #include <dos.h>
  5.  
  6. #include "scroll.h"
  7. #include "PRTgraph.h"
  8. #include "OUTMSG.H"
  9.  
  10. #define CRTtextmode2 0     // set to 1 if you want print in CRT text mode
  11.  
  12. extern int ScreenPreview;
  13. extern int PCXmode;
  14.  
  15. /*=========================================================*/
  16. int _PRT__pascal StdUserPrtFunc( void far* UserPtr,
  17.                                  PRT__handleT   *handlePPtr,
  18.                                  const char far* BGIpath )
  19. /*=========================================================*/
  20. {  int  graphdriver=DETECT,graphmode=0;
  21.    int  Scrn_x1,Scrn_y1,dx,dy,buf_x,buf_y,Scrn_width,Scrn_height;
  22.    int  deltaX,deltaY;
  23.    int  c;
  24.    int  ReturnCode;
  25.    struct viewporttype ts;
  26.    int    BGI_inited=0;
  27.  
  28.       if ( ScreenPreview && PRT_PreviewPossible(0) )
  29.       {
  30.          // If you didn't use BGI_initgraph before PRT_PrintBGI you must
  31.          // initiate graphic mode using either initgraph or BGI_initgraph
  32.          // function
  33.          if ( !BGIactive(Scrn_BGIgroup) )
  34.          {
  35.              BGI_initgraph(&graphdriver,&graphmode,BGIpath,Scrn_BGIgroup);
  36.              if ( graphresult() ) exit(16);
  37.              else BGI_inited=1;
  38.          }
  39.  
  40.          Scrn_x1=0; Scrn_y1=0;
  41.          Scrn_width=getmaxx()+1; Scrn_height=getmaxy()+1;
  42.          getviewsettings(&ts);
  43.          //Scrn_x1=ts.left; Scrn_y1=ts.top;
  44.          //Scrn_width=ts.right-Scrn_x1+1; Scrn_height=ts.bottom-Scrn_y1+1;
  45.          setviewport ( Scrn_x1,Scrn_y1,
  46.                        Scrn_x1+Scrn_width-1,Scrn_y1+Scrn_height-1,1);
  47.          clearviewport();
  48.  
  49.          Scrn_x1=(Scrn_x1+15)&(-16);    Scrn_y1=(Scrn_y1+15)&(-16);
  50.          if ( Scrn_x1+Scrn_width  > getmaxx()+1 ) Scrn_width= (getmaxx()-Scrn_x1+1);
  51.          if ( Scrn_y1+Scrn_height > getmaxy()+1 ) Scrn_height=(getmaxy()-Scrn_y1+1);
  52.          Scrn_width &= (-16);
  53.  
  54.          deltaX = (Scrn_width/5+15) & (-16);
  55.          deltaY = (Scrn_height/5+15) & (-16);
  56.  
  57.          buf_x=buf_y=0;
  58.          //
  59.          // Note that all values passed to PRT_MoveToScrn function should
  60.          // be evenly divided by 16.
  61.          //
  62.          PRT_MoveToScrn (buf_x,buf_y, Scrn_x1,Scrn_y1,Scrn_width,Scrn_height);
  63.  
  64.          do
  65.          {
  66.             if (!kbhit()) { sound(650);delay(5);nosound(); }
  67.             dx=dy=0;
  68.             if ( (c=getch())==0)
  69.             {
  70.                switch (c=getch())
  71.                {
  72.                   case 0x4b: dx=-deltaX; c=0;  break;  // left
  73.                   case 0x4d: dx=deltaX;  c=0;  break;  // right
  74.                   case 0x50: dy=deltaY;  c=0;  break;  // down
  75.                   case 0x48: dy=-deltaY; c=0;  break;  // up
  76.                   default: ;
  77.                }
  78.             }
  79.             PRT_ScrollScrn ( &dx, &dy );
  80.             // buf_x += dx; buf_y += dy;  // you may "uncomment" it if you need
  81.          } while (c==0);
  82.       }
  83.  
  84.       if ( c!=0x1b ) // do not print if Esc key pressed
  85.       {  char msg1[]="Printing...",msg2[]="Please wait";
  86.             int mode=-1;
  87.          #if CRTtextmode2
  88.             mode=BGI_getgraphmode(Scrn_BGIgroup);
  89.          #endif
  90.          if ( mode>=0 )
  91.          {
  92.                restorecrtmode();
  93.                cputs(msg1); cputs(msg2);
  94.          }
  95.          else Outmsg(msg1,msg2,NULL);
  96.          if ( PCXmode )
  97.             ReturnCode =  PRT_WritePCX(handlePPtr);
  98.          else
  99.             ReturnCode =  PRT_PrintBuffer(handlePPtr);
  100.          #if CRTtextmode2
  101.              // initgraph(BGI_getdriver(),BGI_getmode(),BGIpath);
  102.              BGI_setgraphmode(mode);
  103.          #endif
  104.       }
  105.       else ReturnCode=PRT_USER_INTERRUPT;
  106.  
  107.       setviewport(ts.left,ts.top, ts.right,ts.bottom, ts.clip);
  108.  
  109.       if ( BGI_inited )
  110.           BGI_closegraph();
  111.  
  112.  
  113.    return ReturnCode;
  114. }
  115.  
  116. /*=================================================*/
  117. int _PRT__pascal BuildingMsg( void far* UserPtr )
  118. /*=================================================*/
  119. {  char msg1[]="Creating bit image map",msg2[]="Please wait";
  120.    #if CRTtextmode1
  121.    if ( BGIactive(0,Scrn_BGIgroup) )
  122.    {
  123.       int  mode;
  124.       mode=BGI_getgraphmode(Scrn_BGIgroup);
  125.       restorecrtmode();
  126.       cputs(msg1); cputs(msg2);
  127.    }
  128.    else
  129.    #else
  130.       Outmsg(msg1,msg2,NULL);
  131.    #endif
  132.    return 0;
  133. }
  134.